package com.swh.cloud.biz.ui;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.cloud.netflix.ribbon.RibbonClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.web.client.RestTemplate;

import com.netflix.client.config.CommonClientConfigKey;
import com.netflix.client.config.DefaultClientConfigImpl;
import com.netflix.client.config.IClientConfig;
import com.swh.cloud.biz.ui.conf.MyDefaultRibbonConfiguration;

/**
 * 启动程序入口
 * @author sangwenhao
 * @date 2016年12月23日
 */
@SpringBootApplication
@EnableEurekaClient //配置本应用将使用服务注册和服务发现，注意：注册和发现用这一个注解
//@EnableDiscoveryClient
@EnableCircuitBreaker//使用EnableCircuitBreaker或者 EnableHystrix 表明Spring boot工程启用hystrix,两个注解是等价的.
//@EnableHystrix //表示启用断路器，断路器依赖于服务注册和发现。
@EnableHystrixDashboard //表示启动对hystrix的监控,可有监控界面查看（http://localhost:port/hystrix）
public class UserCloudBizUiApplication {

	public static void main(String[] args) {
		SpringApplication.run(UserCloudBizUiApplication.class, args);
	}
	
	//在Spring Cloud中使用RestTemplate 则此注解必须(ribbon形式)，不然会找不到路径（报RestTemplate UnknownHostException）
	@LoadBalanced 
	@Bean //如果不使用xml文件配置此注解必须要写，不然后面@Autowired会匹配不到该bean
	RestTemplate restTemplate() {
		RestTemplate template = new RestTemplate();
		//可对restTemplate做一些初始化设置
//        SimpleClientHttpRequestFactory factory = (SimpleClientHttpRequestFactory) template.getRequestFactory();
//        factory.setConnectTimeout(3000);
//        factory.setReadTimeout(3000);
	    return template ;
	}
	
}
